C语言如何使用函数交换两个变量的值 您所在的位置:网站首页 c语言 change C语言如何使用函数交换两个变量的值

C语言如何使用函数交换两个变量的值

2024-01-08 21:56| 来源: 网络整理| 查看: 265

函数交换变量值

首先咱们先来看一下平常咱们会想到的一个方法 定义一个临时变量来交换数值

#include #include void swap(int x, int y) { int temp = x; x = y; y = temp; } int main() { int a = 10; int b = 20; printf("before : a = %d b = %d", a, b); swap(a, b); printf("after : a = %d b = %d", a, b); system("pause"); return 0; }

然后 咱们来看一下运行的结果: 在这里插入图片描述 发现 a,b的值居然没有改变??? 这是为什么呢? 咱们记住一句话 原因是:形参是实参的一份拷贝 就像咱们平常的文件一样拷贝一份出来,我们修改拷贝后的文件2,改了文件2里面的内容 。但是这和原来的文件有什么影响呢?对吧 所以说这个函数只实现了 交换形参里面的内容 对于实参没有任何影响的呢。

再来说一下在函数调用过程中,如果有形参,实际是重新开辟出一块内存空间来存储东西的。 接下来画一张图: 老王手写 先把 X的值赋给temp 然后将y的值赋给x 然后将temp的值赋给y 就完成了交换 在这里插入图片描述 但是我们看 交换的只是形参的值和实参没有关系😂😂😂 那么我们就要想到使用传址调用,借助指针,就可以很好的解决这一问题:

#include #include void swap(int*x, int* y) { int temp = *x; *x = *y; *y = temp; } int main() { int a = 10; int b = 20; printf("before : a = %d b = %d\n", a, b); swap(&a, &b); printf("after : a = %d b = %d\n", a, b); system("pause"); return 0; }

现在就可以了 在这里插入图片描述 这又是为什么呢? 其实就是使用了指针存储地址的操作 在这里插入图片描述 图我就不画了 相信你们也能理解 实在是太多了 😭😭😭😭

最后附上一个最近写的一到题目:使用递归方法使一个字符串逆序。也是使用指针操作,不过就不是直接操作里面的值了,是改指针的指向。 相信童鞋们也能理解😁😁😁 C语言惊天大bug 数组作为函数参数的时候,会被隐式转换成一个指向首元素的指针

#include #include int myStrlen(char* arr) { //所以这里写成了char*类型也可以写char arr[]哦 if (arr[0] == '\0') { return 0; } return 1 + myStrlen(1 + arr);//递归实现自己的strlen原理差不多 } void reverse_string2(char str[]) { int len = myStrlen(str); char temp = *str; *str = *(str + len - 1); *(str + len - 1) = '\0'; if (myStrlen(str) > 0) { reverse_string2(str + 1); } *(str + len - 1) = temp; } int main() { char arr[] = "abcdfeg"; printf("before:%s\n", arr); reverse_string2(arr); printf("after:%s\n", arr); return 0; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有